ttdla.xsd schema

You use the Transaction Tracking Discovery Library Adapter (TTDLA) to generate iDML books suitable for use by Tivoli Business Service Manager. The TTDLA takes XML data extracted from Transaction Tracking and generates a document for further transformation. This document structure is defined by the ttdla.xsd schema.

The Output element holds the service object data used with Java reflection to create the corresponding CDM classes and their relationships. The schema of the resultant XML is similar to the following example:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
			 targetNamespace="http://www.ibm.com/tivoli/transactions/tracking/dla"
        xmlns:ttdla="http://www.ibm.com/tivoli/transactions/tracking/dla"
        elementFormDefault="qualified">

	<!--============================ Top-level ===============================-->
	<xsd:element name="TransactionTracking">
		<xsd:complexType>
			<xsd:sequence>
				<!--First there is an Input element, with zero or more elements called 
						'ServerInfo', 'RecordIdentity' and 'Relationship'.-->
      		<xsd:element name="Input" minOccurs="1" maxOccurs="1">
       		<xsd:complexType>
						<xsd:sequence>
            		<xsd:element name="ServerInfo" type="ttdla:serverInfoType" 
													minOccurs="0" maxOccurs="unbounded"/>
              	<xsd:element name="RecordIdentity" type="ttdla:recordIdentityType" 
													minOccurs="0" maxOccurs="unbounded"/>
              	<xsd:element name="Relationship" type="ttdla:inputRelationshipType" 
													minOccurs="0" maxOccurs="unbounded"/>
            	</xsd:sequence>
          	</xsd:complexType>
        	</xsd:element>
        
				<!--Second there is an Output element, with zero or more elements called 
						'ServiceObject'.-->
				<xsd:element name="Output" minOccurs="1" maxOccurs="1">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="ServiceObject" type="ttdla:serviceObjectType" 
													minOccurs="0" maxOccurs="unbounded"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>		
	
	<!--	============================ Input types =============================-->
	<xsd:complexType name="serverInfoType">
		<xsd:sequence>	
			<xsd:element name="ServerAddress" type="xsd:string" 
									minOccurs="1" maxOccurs="1"/>	
			<xsd:element name="FQDN" type="xsd:string" 
									minOccurs="1" maxOccurs="1"/>
			<xsd:element name="ServerName" type="xsd:string" 
									minOccurs="1" maxOccurs="1"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="recordIdentityType">
		<xsd:sequence>
			<xsd:element name="Context" type="ttdla:contextType" 
									minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attribute name="CallerType" type="xsd:string" use="required"/>
		<xsd:attribute name="Index" type="xsd:int" use="required"/>
	</xsd:complexType>

	<xsd:complexType name="contextType">	
		<xsd:attribute name="Name" type="xsd:string" use="required"/>
		<xsd:attribute name="Value" type="xsd:string" use="required"/>
	</xsd:complexType>

	<xsd:complexType name="inputRelationshipType">	
		<xsd:attribute name="Source" type="xsd:int" use="required"/>
		<xsd:attribute name="Target" type="xsd:int" use="required"/>
		<xsd:attribute name="Type" type="ttdla:inputRelationshipTypeType" use="required"/>	
	</xsd:complexType>

	<!--Input relationships can have a type of 'Request' or 'RequestResponse'-->
	<xsd:simpleType name="inputRelationshipTypeType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="Request"/>
			<xsd:enumeration value="RequestResponse"/>	
		</xsd:restriction>
	</xsd:simpleType>	

	<!--============================ Output types ============================ -->
	<xsd:complexType name="serviceObjectType">
		<xsd:sequence>
			<xsd:element name="Attributes" minOccurs="0" maxOccurs="1">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="Attribute" type="ttdla:serviceObjectAttributeType" 
												minOccurs="0" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>		
			<xsd:element name="Relationships" minOccurs="0" maxOccurs="1">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="Relationship" 
												type="ttdla:serviceObjectRelationshipType" 
												minOccurs="0" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>		
		</xsd:sequence>
		<xsd:attribute name="Id" type="xsd:string" use="required"/>
		<xsd:attribute name="Type" type="xsd:string" use="required"/>
		<xsd:attribute name="SourceToken" type="xsd:string" use="optional"/>
	</xsd:complexType>

	<xsd:complexType name="serviceObjectAttributeType">
		<xsd:attribute name="Name" type="xsd:string" use="required"/>
		<xsd:attribute name="Value" type="xsd:string" use="required"/>
		<xsd:attribute name="Method" type="xsd:string" use="optional"/>
	</xsd:complexType>

	<xsd:complexType name="serviceObjectRelationshipType">
		<xsd:sequence>
			<xsd:element name="ServiceObject"
                    type="ttdla:serviceObjectType"
                    minOccurs="1" maxOccurs="1"/>
		</xsd:sequence>
		<xsd:attribute name="Type" type="xsd:string" use="required"/>
		<xsd:attribute name="Method" type="xsd:string" use="optional"/>
	</xsd:complexType>
</xsd:schema>
Following is an example of the transformed ServiceObject element that can be placed in the Output section:
<ServiceObject Id="id1" Type="process.IDML_Activity">
	<Attributes>
		<Attribute Name="ActivityName" Value="MYAPP#t#TEST TRANSACTION1#s#TEST 
							TRANSACTION12"/>
		<Attribute Name="Label" Value="TEST TRANSACTION12"/>
	</Attributes>
	<Relationships>
		<Relationship Type="Uses">
			<ServiceObject Id="id2" Type="process.IDML_Activity"/>
		</Relationship>
	</Relationships>
</ServiceObject>

CDM relationships

Service objects

Each ServiceObject requires a Type and an Id.

The Type value is prepended with com.ibm.dl.schema.cdm. to form the full class name. In the previous example, the class name for both service objects is com.ibm.dl.schema.cdm.process.IDML_Activity. The implementation uses reflection to instantiate the service object by using this class name.

The CDM class generation assumes that all service objects are inheritance of 'com.ibm.dl.production.IDMLManagedElement'. The construction of this object requires a string Id value, which is provided by ServiceObject[@Id].

Note: The Id value is only used locally within the single iDML book to establish relationships between service objects and only needs to be locally unique. The CreateIdentifiers.xsl transformer generates the Id based on the CDM class type and its corresponding attributes. Use integers, for example, the index of the corresponding RecordIdentity, throughout the transformation chain ensuring that relationships can be tracked if necessary.

Relationships

Relationships are defined using the Relationship element. The Type of the element results in instance method of name create<TypeValue> being located and called on the corresponding service object. In the example, an IDML_Activity instance calls createUses() on another IDML_Activity instance.

Attributes

Attributes can accumulate for multiple <ServiceObject> of the same Id, defined in multiple places. If an attribute is not already set in a service object instance, the setAttribute<Attribute> method is searched using reflection and called upon to set the corresponding attribute value. In the example, the service object is setAttributeActivityName and setAttributeLabel.